﻿#include<stdio.h>

//struct stu
//{
//	int age;
//	char name[20];
//	int id;
//};
//
//struct
//{
//	int num;
//	char sex[10];
//	int id;
//}x = {10,"Male",123};
//
//struct
//{
//	int num;
//	char sex[10];
//	int id;
//}a[20],*p;
//
//int main()
//{
//	struct stu s1 = { 12,"Lisi",12345 };
//
//	struct stu s2 = { .name = "Wangwu",.age = 19,.id = 13456 };
//
//	printf("%d\n", s1.age);
//
//	printf("%d\n", s1.id);
//
//	printf("%s\n", s1.name);
//
//	printf("%d\n", s2.age);
//
//	printf("%d\n", s2.id);
//
//	printf("%s\n", s2.name);
//
//	printf("%d\n", x.num);
//
//	printf("%s\n", x.sex);
//
//	printf("%d\n", x.id);
//
//
//	//虽然能够编译，但是是非法的
//	//p = &x;
//
//	//printf("%d\n", p->num);
//
//	//printf("%s\n", p->sex);
//
//	//printf("%d\n", p->id);
//
//	return 0;
//}

//struct stu
//{
//	int x;
//	int y;
//	char name[10];
//};
//struct stu1
//{
//	char x;
//	int y;
//	char z;
//};
//struct p1
//{
//	char a;
//	int b;
//}m1;
//
//struct p2
//{
//	char c;
//	struct p1 m1;
//	char d;
//	int e;
//};
//
//
//struct S1
//{
//	char c1;
//	int i;
//	char c2;
//};
//
//struct S2
//{
//	char c1;
//	char c2;
//	int i;
//};
//void Printl(struct stu s)
//{
//	printf("%d %d %s", s.x, s.y,s.name);
//}
//
//void Set_stu(struct stu *ptr)
//{
//	strcpy( ptr->name,"Wangwu");
//	ptr->x = 8;
//	ptr->y = 6;
//}
//
//#pragma pack(1)
//struct pp
//{
//	char a;
//	int b;
//	char c;
//};
//#pragma pack()
//
//void print1(struct pp p1)
//{
//	printf("%c %d %c", p1.a,p1.b,p1.c);
//}
//
//void print2(struct pp* p1)
//{
//	p1->a = 'c';
//	p1->c = 'e';
//	printf("%c %d %c", p1->a, p1->b, p1->c);
//}


struct A
{
	char a : 3;
	char b : 4;
	char c : 5;
	char d : 4;
};


union Un
{
	char c;
	int i;
};


union Un1
{
	char c[5];
	int i;
};

union Un2
{
	short c[7];
	int i;
};


	struct gift_list
	{
		int stock_number;
		float price;
		int item_type;
		union {
				struct 
				{
					char title[20];
					char author[20];
					int num_pages;
				}book;

				struct 
				{
					char design[20];
				}mug;//杯子

				struct 
				{
					char design[20];
					int colors;
					int sizes;
				}shirt;

			}item;
	};



	int check_sys()
	{
		union
		{
			int i;
			char c;
		}un;
		un.i = 1;
		return un.c;//返回1是⼩端，返回0是⼤端 
	}



	enum Color
	{
		RED,
		GREEN = 4,
		BLUE
	};//颜⾊ 

int main()
{
	/*struct stu s1 = { 2,4,"lisi"};

	Printl(s1);

	printf("\n");

	Set_stu(&s1);

	Printl(s1);

	printf("\n");


	printf("%zd ", sizeof(struct stu));
	printf("%zd ", sizeof(struct stu1));
	printf("%zd ", sizeof(struct p2));
	printf("%zd %zd\n", sizeof(struct S1),sizeof(struct S2));

	printf("%zd\n", sizeof(struct pp));

	struct pp p1 = { 'a',2,'b' };
	print1(p1);
	printf("\n");
	print2(&p1);
	printf("\n");*/

	//struct A s = { 0 };

	//s.a = 10;
	//s.b = 12;
	//s.c = 3;
	//s.d = 4;

	//printf("%zd\n", sizeof(struct A));

	//printf("s.a = %d ", s.a);
	/*scanf("%d ", &s.a);*///这是不正确的写法哦

	//int ed = 20;
	//s.a = ed;
	//printf("s.a = %d \n", s.a);

	//union a a1 = { 0 };
	//printf("%zd \n", sizeof(a1));


	//union a a2 = { 0 };

	//// 下⾯输出的结果是⼀样的吗？
	//printf("%p\n", &(a2.x));
	//printf("%p\n", &(a2.y));
	//printf("%p\n", &a2);


	//联合变量的定义
	
		/*union Un un = { 0 };

		un.i = 0x11223344;
		un.c = 0x55;

		printf("%x\n", un.i);*/
		


	//printf("%d\n", sizeof(union Un1));
	//printf("%d\n", sizeof(union Un2));

	//struct gift_list gift;

	//// 假设修改书的属性
	//gift.item_type = 0; // 表示书类型
	//strcpy(gift.item.book.title, "New Book Title");
	//strcpy(gift.item.book.author, "New Author");
	//gift.item.book.num_pages = 250;
	//gift.stock_number = 8;
	//gift.price = 19.99;

	//// 假设修改杯子的属性
	//gift.item_type = 1; // 表示杯子类型
	//strcpy(gift.item.mug.design, "New Mug Design");
	//gift.stock_number = 15;
	//gift.price = 10.5;

	//// 假设修改衬衫的属性
	//gift.item_type = 2; // 表示衬衫类型
	//strcpy(gift.item.shirt.design, "New Shirt Design");
	//gift.item.shirt.colors = 3;
	//gift.item.shirt.sizes = 42;
	//gift.stock_number = 12;
	//gift.price = 25.0;

	/*int ret = check_sys();
	if (ret == 1)
		printf("小端");
	else
		printf("大端");*/

	printf("%d %d %d\n", RED, GREEN, BLUE);



	return 0; 
}


